package top.stmo.spring.transfer;


/**
 *
 *   实现步骤:
 *        1.接口上加上@Transactional注解
 *        2.再配置类中配置事务管理器,mybatis使用的是jdbc事务
 *        3.在spring事务上加上,开启注解式事务驱动,即@EnableTransactionManagement注解
 *
 *   @EnableTransactionManagement       设置当前Spring环境中开启注解式事务支持
 *
 *   @Transactional   为当前业务层方法添加事务（如果设置在类或接口上方则类或接口中所有方法均添加事务）
 *
 *   @Transactional可以写在接口类上、接口方法上、实现类上和实现类方法上
 *      写在接口类上，该接口的所有实现类的所有方法都会有事务
 *      写在接口方法上，该接口的所有实现类的该方法都会有事务
 *      写在实现类上，该类中的所有方法都会有事务
 *      写在实现类方法上，该方法上有事务
 *      建议写在实现类或实现类的方法上
 *
 *
 *   -------------------------------spring事务角色----------------------------------
 *
 *   事务管理员：发起事务方，在Spring中通常指代业务层开启事务的方法
 *   事务协调员：加入事务方，在Spring中通常指代数据层方法，也可以是业务层方法
 *  注意:
 *   目前的事务管理是基于DataSourceTransactionManager和SqlSessionFactoryBean使用的是同一个数据源
 *
 *  -------------------------------spring事务属性----------------------------------
 *
 *  readOnly：true只读事务，false读写事务，增删改要设为false,查询设为true
 *  timeout:设置超时时间单位秒，在多长时间之内事务没有提交成功就自动回滚，-1表示不设置超时时间
 *  rollbackFor:当出现指定异常进行事务回滚
 *  noRollbackFor:当出现指定异常不进行事务回滚
 *     思考:出现异常事务会自动回滚，这个是我们之前就已经知道的
 *     noRollbackFor是设定对于指定的异常不回滚，这个好理解
 *     rollbackFor是指定回滚异常，对于异常事务不应该都回滚么，为什么还要指定?
 *
 *  除了eeeor和运行时异常，其他异常不参与事务回滚
 *
 *  rollbackFor可以指定让那些异常参与回滚  @Transactional(rollbackFor = {IOException.class})
 *
 *
 *  propagation    事务传播行为：事务协调员对事务管理员所携带事务的处理态度
 *
 *  @Transactional(propagation = Propagation.REQUIRES_NEW)    可以设置单独是一个事务
 *
 */
public class App {
}
